package com.pig4cloud.pigx.common.customize.redis.constants;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.concurrent.TimeUnit;

/**
 * Redis缓存key常量声明
 *
 * @since 2022/11/1 18:32
 */
@Getter
@AllArgsConstructor
public enum RedisKeyEnum {

    // -------- 配置缓存-开始 --------

    /**
     * 配置缓存（hash）
     */
    ConfigHashKey("config_cache", null, null),

    /**
     * 开放api配置(hash.member)
     */
    UserApi("user_api", null, null),

    // -------- 配置缓存-结束 --------

    /**
     * 开放api-AccessKey缓存（string）
     * <p> user_api:access_key:{accessKey}
     */
    UserApiAccessKey("user_api:access_key:%s", 10L, TimeUnit.MINUTES),

    /**
     * 开放api-AccessKey的IP缓存(hash)
     * <p> user_api:ip:{accessKey}
     */
    UserApiIp("user_api:ip:%s", 10L, TimeUnit.MINUTES),

    /**
     * 开放api-nonce(incr)
     * <p> api:nonce:{nonce}
     */
    ApiNonce("api:nonce:%s", 5L, TimeUnit.MINUTES),
    /**
     * 开放api-重放攻击地址(incr)
     * <p> api:replay_attach:{ip}
     */
    ApiReplayAttack("api:replay_attach:%s", 1L, TimeUnit.DAYS),
    /**
     * 开放api-登录Token(string)
     * <p> api:login_token:{accessKey_ip}
     */
    ApiLoginToken("api:login_token:%s", 10L, TimeUnit.MINUTES),
    /**
     * 开放api-访问频率(string)
     * <p> api:rate_limit:{accessKey_ip_requestPath}
     */
    ApiRateLimit("api:rate_limit:%s", null, null),
    /**
     * 开放api-ws连接频率(string)
     * <p> api:ws:rate_limit:{accessKey_ip}
     */
    ApiWsRateLimit("api:ws:rate_limit:%s", 1L, TimeUnit.DAYS);

    /**
     * redis缓存的key名称
     */
    private final String key;
    /**
     * redis缓存的过期时间
     */
    private final Long expire;
    /**
     * redis缓存的过期时间单位
     */
    private final TimeUnit expireUnit;
}
